<?php

namespace util;

/**
 * curl 请求类
 */
class Curl
{

    /**
     * curl get请求
     * @param  string  $url     请求URL
     * @param  string  $header  header头信息 $header = ['token: sldfe7283sjd', 'Content-Type: application/json'];
     * @param  integer $timeout 超时时间，单位秒
     * @return mixed
     */
    static public function curlGetRequest($url = '', $header = '', $timeout = 3)
    {
        if (empty($url)) return false;

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        if (stripos($url, 'https://') !== FALSE) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($ch, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
        }
        if (!empty($header)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        }

        $res     = curl_exec($ch);
        $rescode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        return $res;
    }

    /**
     * curl post请求
     * @param  string  $url      请求URL
     * @param  array   $data     post数据
     * @param  string  $header   header头部信息
     * @param  integer $time_out 请求超时时间，单位秒
     * @return mixed
     */
    static public function curlPostRequest($url = '', $data = [], $header = '', $time_out = 3)
    {
        $oCurl = curl_init();                                                                          // 启动一个CURL会话
        curl_setopt($oCurl, CURLOPT_URL, $url);                                                        // 要访问的地址
        if (stripos($url, 'https://') !== FALSE) {
            curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);                                        // 对认证证书来源的检查
            curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);                                        // 从证书中检查SSL加密算法是否存在
            curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
        }
        // 模拟用户使用的浏览器
        curl_setopt($oCurl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
        // curl_setopt($oCurl, CURLOPT_FOLLOWLOCATION, 1);                                             // 使用自动跳转
        // curl_setopt($oCurl, CURLOPT_AUTOREFERER, 1);                                                // 自动设置Referer
        curl_setopt($oCurl, CURLOPT_POST, 1);                                                          // 发送一个常规的Post请求
        curl_setopt($oCurl, CURLOPT_POSTFIELDS, http_build_query($data));                              // Post提交的数据包x
        curl_setopt($oCurl, CURLOPT_TIMEOUT, $time_out);                                               // 设置超时限制防止死循环
        curl_setopt($oCurl, CURLOPT_HEADER, 0);                                                        // 显示返回的Header区域内容
        curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);                                                // 获取的信息以文件流的形式返回
        if (!empty($header)) {
            curl_setopt($oCurl, CURLOPT_HTTPHEADER, $header);
        }
        $tmpInfo   = curl_exec($oCurl);                                                                 // 获取返回数据
        $tmpStatus = curl_getinfo($oCurl);

        if (curl_errno($oCurl)) {
            $error  = 'Error: '.curl_error($oCurl);                                                     //捕抓异常，并写入日志
            $error .= '; url: '.$url.'; data: '.json_encode($data, JSON_UNESCAPED_UNICODE);
            printLog($error, 'curlRequest/post');
        }
        curl_close($oCurl);                                                                             // 关闭CURL会话

        return $tmpInfo;                                                                                // 返回数据
    }

}

